// 42.toFixed()是一种非法的写法
(function () {
    // console.log(42.toFixed());
    console.log(42..toFixed());
    console.log((42).toFixed());
})();

// 0.1 + 0.2 === 0.3; // false
(function () {
    console.log(0.1 + 0.2 === 0.3);
    // Number.EPSILON只存在在es6中
    console.log(Math.abs((0.1 + 0.2) - 0.3) < Number.EPSILON);
})();

// null和undefined的区别和含义
/* 
null:曾经有值，但现在为空
undefined:从未赋值
*/
(function () {
    console.log("-------null and undefined-----------");
    var b;
    console.log(b);
    b = 0;
    b = null;
    console.log(b);
})();


// return void setTimeout( doSomething, 100 ); void的用法（不常用）
/* 
目的是为了让函数返回为undefined
*/
(function () {
    function doSomething() {}

    (function a() {
        console.log("start");
        return void setTimeout(doSomething, 100);
    })();
})();


// NaN的含义
(function () {
    console.log("=========NaN============");
    var a = 3 / "d";
    console.log(a);
    console.log(typeof a === "number");
})();

// - 判断NaN
/* 
需要注意的是NaN不等于他自己，所以不能用==来进行判断
*/
(function () {
    var a = 2 / "d";
    console.log(a);
    console.log(a === NaN);
    console.log(isNaN(a));
})();


// 使用window.isNaN的不精确性
(function () {
    console.log("=========window.isNaN 不可靠=========")
    var a = 2 / "d";
    var b = "d";
    console.log(isNaN(a) && typeof a === "number");
    console.log(isNaN(b));
    console.log(isNaN(b) && typeof b === "number");
    console.log(Object.is( a, NaN ));
})()